/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.projetosi.web.server.sistema.persistencia;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

import com.projetosi.web.server.sistema.interfaces.IGenericObject;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;




/**
 * 
 * @author  Filipe Alencar, Felipe J. Cavalcanti, Rodrigo L. de Brito, Thiago Gon�alves, Victor Hugo Arcelino.
 *
 */
public class LerEscreveArquivo {
    
    private static XStream xStream = new XStream();
    private static BufferedWriter writer;
    private static BufferedReader reader;
    private static XStream xstream2 = new XStream(new DomDriver());
    /**
     * Salva uma List em um certo arquivo.
     * @param <T> O tipo dos objetos que a lista guarda.
     * @param lista Lista de objetos a ser salva no arquivo.
     * @param arquivo Arquivo onde a informacao vai ser salva.
     * @throws IOException
     */
    public static <T extends IGenericObject> void salvarObjeto(List<T> lista, File arquivo ) throws IOException{
        try{
            writer = new BufferedWriter(new FileWriter(arquivo));
            String objetos  = xStream.toXML(lista);
            writer.write(objetos);
        } catch (IOException ioex) {
            ioex.printStackTrace();
        }finally{
            writer.close();
        }
    }

    /**
     * Carrega (ler) todos os dados contidos em um certo arquivo.
     * @param <T> O tipo de objetos que a lista a ser retornada deve conter.
     * @param arquivo O arquivo a ser lido.
     * @return Uma lista que estava armazenada no arquivo.
     * @throws IOException
     */
     public static  <T extends IGenericObject> List<T> lerArquivo(File arquivo) throws IOException{
        List<T> lista = null;
        try{
            reader = new BufferedReader(new FileReader(arquivo));
            lista = (List<T>) xstream2.fromXML(reader);
        }catch(FileNotFoundException ex){
            ex.printStackTrace();
        }
        catch(IOException ioex){
            ioex.printStackTrace();
        }
        finally{
            reader.close();
         }
        return lista;
    }

    /**
     * Verifica se um arquivo ja existe.
     * @param arquivo O arquivo a ser verificado.
     * @return true: se o arquivo existir, false: caso contrario.
     */
     public static boolean existeXml(File arquivo){
          return arquivo.exists();
     }
     

}
